<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Zlwblog-学习记录与技术分享</title>
  <link rel="shortcut icon" href="./static/img/favicon.ico">
  <meta name="description" content="朱力维的博客">
  <meta name="baidu-site-verification" content="codeva-ItASp9Ab8V" />
  <meta name="viewport"
        content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0,shrink-to-fit=no">
  <meta content="yes" name="apple-mobile-web-app-capable">
  <meta content="black" name="apple-mobile-web-app-status-bar-style">
  <meta content="telephone=no" name="format-detection">
  <meta name="msapplication-tap-highlight" content="no">
  <!-- <link rel="stylesheet" href="http://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css"> -->
  <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
  <script type="text/javascript" charset="UTF-8" src="./static/js/shCore.js"></script>

  <style>
    * {
      margin: 0;
      padding: 0;
    }

    .loading-screen {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100vh;
      background: #f5f5f5;
      display: flex;
      align-items: center;
      justify-content: center;
      text-align: center;
    }

    .logo {
      width: 48px;
      height: 48px;
    }

    .loading-bar {
      width: 130px;
      height: 2px;
      background: #cfcfcf;
      margin-top: 22px;
      position: relative;
      overflow: hidden;
    }

    .loading-bar::before {
      content: "";
      width: 68px;
      height: 2px;
      background: #0073b1;
      position: absolute;
      left: -34px;
      animation: bluebar 1.5s infinite ease;
    }

    @keyframes bluebar {
      50% {
        left: 96px;
      }
    }


  </style>
</head>
<body>
<span class="js-cursor-container"></span>
<div id="app">
  <div class="loading-screen">
    <div class="loading-animation">
      Waiting...
      <div class="loading-bar"></div>
    </div>
  </div>

</div>
</body>
<script>
  (function fairyDustCursor() {

    var possibleColors = ["#D61C59", "#E7D84B", "#1B8798"]
    var width = window.innerWidth;
    var height = window.innerHeight;
    var cursor = { x: width / 2, y: width / 2 };
    var particles = [];

    function init() {
      bindEvents();
      loop();
    }

    // Bind events that are needed
    function bindEvents() {
      document.addEventListener('mousemove', onMouseMove);
      window.addEventListener('resize', onWindowResize);
    }

    function onWindowResize(e) {
      width = window.innerWidth;
      height = window.innerHeight;
    }

    function onMouseMove(e) {
      cursor.x = e.clientX;
      cursor.y = e.clientY;

      addParticle(cursor.x, cursor.y, possibleColors[Math.floor(Math.random() * possibleColors.length)]);
    }

    function addParticle(x, y, color) {
      var particle = new Particle();
      particle.init(x, y, color);
      particles.push(particle);
    }

    function updateParticles() {

      // Updated
      for (var i = 0; i < particles.length; i++) {
        particles[i].update();
      }

      // Remove dead particles
      for (var i = particles.length - 1; i >= 0; i--) {
        if (particles[i].lifeSpan < 0) {
          particles[i].die();
          particles.splice(i, 1);
        }
      }

    }

    function loop() {
      requestAnimationFrame(loop);
      updateParticles();
    }

    /**
     * Particles
     */
    function Particle() {

      this.character = "*";
      this.lifeSpan = 120; //ms
      this.initialStyles = {
        "position": "fixed",
        "display": "inline-block",
        "top": "0px",
        "left": "0px",
        "pointerEvents": "none",
        "touch-action": "none",
        "z-index": "10000000",
        "fontSize": "25px",
        "will-change": "transform"
      };

      // Init, and set properties
      this.init = function (x, y, color) {

        this.velocity = {
          x: (Math.random() < 0.5 ? -1 : 1) * (Math.random() / 2),
          y: 1
        };

        this.position = { x: x + 10, y: y + 10 };
        this.initialStyles.color = color;

        this.element = document.createElement('span');
        this.element.innerHTML = this.character;
        applyProperties(this.element, this.initialStyles);
        this.update();

        document.querySelector('.js-cursor-container').appendChild(this.element);
      };

      this.update = function () {
        this.position.x += this.velocity.x;
        this.position.y += this.velocity.y;
        this.lifeSpan--;

        this.element.style.transform = "translate3d(" + this.position.x + "px," + this.position.y + "px, 0) scale(" + (this.lifeSpan / 120) + ")";
      }

      this.die = function () {
        this.element.parentNode.removeChild(this.element);
      }

    }

    /**
     * Utils
     */
    // Applies css `properties` to an element.
    function applyProperties(target, properties) {
      for (var key in properties) {
        target.style[key] = properties[key];
      }
    }

    if (!('ontouchstart' in window || navigator.msMaxTouchPoints)) init();
  })();
</script>
</html>
